
#ifndef RTT_WRAPPER_H
#define RTT_WRAPPER_H

// --- 包含原始的SEGGER RTT头文件，以便在开启时能找到原型 ---
#include "SEGGER_RTT.h"

/*********************************************************************
*
*       RTT 功能总开关
*
*   在你的 bsp.h 或者工程配置中定义这个宏来开启所有RTT功能。
*   如果不定义，所有RTT相关的函数调用都会被编译器优化掉。
*
**********************************************************************/
#define ENABLE_RTT_FUNCTIONS

#ifdef ENABLE_RTT_FUNCTIONS

    // 如果开启了RTT，就将我们的包装宏定义为真正的SEGGER函数
    // __VA_ARGS__ 是一个可变参数宏，它会把 ... 的部分传递过去
    #define RTT_printf(BufferIndex, ...)         SEGGER_RTT_printf(BufferIndex, __VA_ARGS__)
    #define RTT_ConfigUpBuffer(...)              SEGGER_RTT_ConfigUpBuffer(__VA_ARGS__)
    #define RTT_ConfigDownBuffer(...)            SEGGER_RTT_ConfigDownBuffer(__VA_ARGS__)
    #define RTT_SetTerminal(...)                 SEGGER_RTT_SetTerminal(__VA_ARGS__)
    #define RTT_CustomFunction(...)              SEGGER_RTT_CustomFunction(__VA_ARGS__)
    // ... 其他 SEGGER_RTT 函数添加包装宏 ...

#else
    // (void)0) 是一个C语言技巧，可以安全地接受任何参数并被编译器完全优化掉
    // 并且能保证像 "if(x) RTT_printf(..);" 这样的语句语法正确。
    #define RTT_printf(...)                      ((void)0)
    #define RTT_ConfigUpBuffer(...)              ((void)0)
    #define RTT_ConfigDownBuffer(...)            ((void)0)
    #define RTT_SetTerminal(...)                 ((void)0)
    #define RTT_CustomFunction(...)              ((void)0)
    // ...

#endif // ENABLE_RTT_FUNCTIONS


#endif // RTT_WRAPPER_H